//
//  ViewController.m
//  25-Homework
//
//  Created by dllo on 16/8/17.
//  Copyright © 2016年 ZHW. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // GCD
    // 任务的执行方法(同步或异步)和队列的运行方式(串行或并行)
    
    // GCD的队列分为几种
    // 1 主队列
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    // 2 全局队列
    // 参数1:优先级 参数2: 苹果官方文档的解释：Flags that are reserved for future use。标记是为了未来使用保留的！所以这个参数应该永远指定为0
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    // 3 用户创建队列
    // 队列为dispatch_queue_t对象
    // 创建串行队列
    // 参数1: C语言字符串 参数2: attr:有三种传值方式：
    // 1> 串行 #define DISPATCH_QUEUE_SERIAL NULL
    // 2> 并行 #define DISPATCH_QUEUE_CONCURRENT
    dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
    
    // 同步与异步
    // 1 异步 任务提交到队列中，提交之后立即返回
    // 参数1:队列 参数2:应用定义的上下文 参数3: C语言函数
    // dispatch_async_f(<#dispatch_queue_t  _Nonnull queue#>, <#void * _Nullable context#>, <#dispatch_function_t  _Nonnull work#>)
    
    // 串行异步
    // 参数1: 队列 参数2: block
    dispatch_async(serialQueue, ^{
        NSLog(@"block内容");
        // block的内容最后执行
    });
    NSLog(@"1234");
    
    // 创建并行队列
    dispatch_queue_t globalQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    // 并行异步
    dispatch_async(globalQueue, ^{
        
    });
    
    // 串行同步
    dispatch_sync(serialQueue, ^{
        // 等block内容执行完, 再执行后面的内容
        NSLog(@"执行XXX");
    });
    NSLog(@"完成");
    // 并行同步
    dispatch_sync(globalQueue, ^{
        
        NSLog(@"xxx");
    });
    NSLog(@"完成");
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
